package bancosys.tec.persist.authorization;

import static bancosys.tec.persist.authorization.AuthorizationStatus.DISABLED;
import static bancosys.tec.persist.authorization.AuthorizationStatus.ENABLED;

/**
 * Enum que indica o modo de autorização da entidade. Caso seja default, o valor configurado no sistema para ativação ou desativação da base
 * fria deve ser assumido. Caso seja FORCE_HOT ou FORCE_COLD, a entidade pode ser enviada para a quente ou para a fria, respectivamente,
 * independente da configuração do sistema.
 * 
 * @author lundberg
 */
public enum AuthorizationMode {
    DEFAULT(false, null), FORCE_HOT(true, DISABLED), FORCE_COLD(true, ENABLED);

    private final boolean force;

    private final AuthorizationStatus status;

    /**
     * Construtor
     * 
     * @param force force
     * @param status status
     */
    private AuthorizationMode(boolean force, AuthorizationStatus status) {
        this.force = force;
        this.status = status;
    }

    /**
     * Retorna true caso o status de autorização deva ser forçado, independente da configuração do sistema. Falso caso o default do sistema
     * deva ser assumido.
     * 
     * @return force
     */
    public boolean isForce() {
        return this.force;
    }

    /**
     * Retorna o status de autorização que deve ser utilizado caso force seja true.
     * 
     * @return the status
     */
    public AuthorizationStatus getStatus() {
        return this.status;
    }
}
